import { reqCartList,reqDeleteCartById,reqUpdateCheckedById} from "@/api"

const state ={
    cartList: []
};

const mutations ={
     GETCARTLIST(state,cartList) {
          state.cartList = cartList
     }
};
const actions = {
     // 获取购物车列表数据
     async getCartList({commit}) {
       let result =  await reqCartList()
       if(result.code == 200) {
          commit('GETCARTLIST',result.data)
       }
     },
     // 删除购物车某一个产品的数据
     async deleteCartListBySkuId({commit},skuId) {
         let result = await reqDeleteCartById(skuId)
         if(result.code==200) {
          return "ok"
         } else {
          return Promise.reject(new Error("faile"))
         }
     },
     // 修改购物车某一个产品的选中状态
    async updateCheckedById({commit},{skuId,isChecked}) {
        let result = await reqUpdateCheckedById(skuId,isChecked)
        if(result.code==200) {
          return "ok"
        }else{
          return Promise.reject(new Error("faile"))
        }
         
     },
     // 删除购物车中全部勾选的产品
     // context(上下文) 相当于精简版的 $store（仓库）
     // context小仓库里面 可以 commit【提交mutations修改state】 getters【计算属性】 dispatch【派发action】 state【当前仓库数据】
     deleteAllCheckedCart({dispatch,getters}){
          // 获取购物车中全部的产品(是一个数组)
          let PromiseAll = []
          getters.cartList.cartInfoList.forEach(item => {
               let promise = item.isChecked==1?dispatch('deleteCartListBySkuId',item.skuId):'';
               // 将每一次返回的Promis添加到数组当中
               PromiseAll.push(promise)
          });
          // 只要全部的p1|p2...都成功 返回结果即为成功
          // 如果有一个失败 返回即为失败结果
          return Promise.all(PromiseAll)
     },
     // 修改购物车全部商品的选中状态
     updateAllCartIsChecked({dispatch,state},isChecked) {
          // 数组
          let promiseAll = [];
          state.cartList[0].cartInfoList.forEach((item)=> {
               let promise = dispatch('updateCheckedById',{
                    skuId: item.skuId,
                    isChecked,
               });
               // 将每一次返回的Promis添加到数组当中
               promiseAll.push(promise)
          })
          // 最终返回的结果
          return Promise.all(promiseAll)
     }
};
const getters = {
     cartList(state) {
          return state.cartList[0]||{}
     }
};

export default  {
     state,
     mutations,
     actions,
     getters
}